/*
 ============================================================================
 Name        : eXtremeTetris.c
 Author      : 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

#include "SDL.h"

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

SDL_Surface *load_image(char *filename)
{
    //Temporary storage for the image that's loaded
    SDL_Surface* loadedImage = NULL;

    //The optimized image that will be used
    SDL_Surface* optimizedImage = NULL;

    //Load the image
//    strcat(filename, "../res/");
    loadedImage = SDL_LoadBMP(filename);

//    fprintf(stdout, "%s\n", filename);

    //If nothing went wrong in loading the image
    if (loadedImage != NULL)
    {
        //Create an optimized image
        optimizedImage = SDL_DisplayFormat(loadedImage);

        //Free the old image
        SDL_FreeSurface(loadedImage);
    }
    //Return the optimized image
    return optimizedImage;
}

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
    //Make a temporary rectangle to hold the offsets
    SDL_Rect offset;

    //Give the offsets to the rectangle
    offset.x = x;
    offset.y = y;

    //Blit the surface
    SDL_BlitSurface(source, NULL, destination, &offset);
}

int main(int argc, char* args[])
{
    //The surfaces that will be used
    SDL_Surface *message = NULL;
    SDL_Surface *background = NULL;
    SDL_Surface *screen = NULL;


    //Initialize all SDL subsystems
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        return 1;
    }

    //Set up the screen
    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,
            SDL_SWSURFACE);

    //If there was an error in setting up the screen
    assert(screen);

    if (screen == NULL)
    {
        return 1;
    }


    //Set the window caption
    SDL_WM_SetCaption("Hello World", NULL);

    //Load the images
    message = load_image("..\\res\\hello_world.bmp");
    background = load_image("..\\res\\background.bmp");


    //Apply the background to the screen
    apply_surface(0, 0, background, screen);

    apply_surface(320, 0, background, screen);
    apply_surface(0, 240, background, screen);
    apply_surface(320, 240, background, screen);

    //Apply the message to the screen
    apply_surface(100, 100, message, screen);

    //Update the screen
    if (SDL_Flip(screen) == -1)
    {
        return 1;
    }

    //Wait 2 seconds
    SDL_Delay(2000);

    //Free the surfaces
    SDL_FreeSurface(message);
    SDL_FreeSurface(background);

    //Quit SDL
    SDL_Quit();

    //Return
    return 0;
}
